#include <iostream>
#include <fstream>
using namespace std;

int main() {
    ifstream input("input.txt"); // 打开输入文件
    ofstream output("output.txt"); // 打开输出文件

    int n;
    input >> n; // 从输入文件读取n的值

    vector<vector<int>> rent(n + 1, vector<int>(n + 1)); // 创建n+1行n+1列的二维向量来存储租金信息

    // 自己到自己为0
    for (int i = 0; i <= n; i++) {
        rent[i][i] = 0; // 将自己到自己的租金设为0
    }
    
    // 从输入文件读取租金信息
    for (int i = 1; i <= n; i++) {
        for (int j = i + 1; j <= n; j++) {
            input >> rent[i][j]; // 读取租金信息
        }
    }

    // 动态规划计算最少租金
    vector<int> dp(n + 1, INT_MAX); // 创建长度为n+1的向量dp，初始值设为INT_MAX
    dp[1] = 0; // 第一个位置的最小租金设为0

    // 使用动态规划算法计算最小租金
    for (int i = 2; i <= n; i++) {
        for (int j = 1; j < i; j++) {
            dp[i] = min(dp[i], dp[j] + rent[j][i]); // 更新dp[i]的值
        }
    }

    output << dp[n] << endl; // 将最小租金写入输出文件
    cout << "最少租金是：" << dp[n] << endl; // 输出最小租金到控制台
    input.close(); // 关闭输入文件
    output.close(); // 关闭输出文件
    cout << "已写入文件output.txt" << endl; // 输出提示信息
    
    return 0;
}